import { createRouter, createWebHashHistory } from 'vue-router';
import Login from '../views/Login.vue';
import MainBox from '../views/MainBox.vue';
import RoutesConfig from './config';
import $store from '../store';
const routes = [
  {
    path: '/login',
    name: 'login',
    component: Login
  },
  {
    path: '/mainbox',
    name: 'mainbox',
    component: MainBox
  }
]
const ConfigRouter = () => {
  if(!router.hasRoute('mainbox')) {
    router.addRoute({
      path: '/mainbox',
      name: 'mainbox',
      component: MainBox
    })
  }
  RoutesConfig.forEach(item => {
    checkPermission(item) && router.addRoute('mainbox', item)
  })
  // 将 isGetterRouter 改为 true
  $store.commit('changeGetterRouter', true)
}
const router = createRouter({
  history: createWebHashHistory(),
  routes
})
const checkPermission = (item)=> {
  if(item.admin) {
    return $store.state.userInfo.role === 1
  }
  return true
}
router.beforeEach((to, from, next) => {
  // 判断是否登录
  if (to.name === 'login') {
    next()
  } else {
    if (!localStorage.getItem('token')) {
      next({
        path: '/login'
      })
    } else {
      // 只有第一次需要添加子路由组件并放行
      if (!$store.state.isGetterRouter) {
        // 删除所有潜逃路由
        router.removeRoute('mainbox')
        // 存在 token 即添加子路由成为完整页面
        ConfigRouter()
        // 如果接下来的next不手动设置匹配路径，则不会自动跳转，因为ConfigRouter刚执行，可以理解为next还未响应到应该到哪个路径
        next({
          path: to.fullPath
        })
      } else {
        next()
      }
    }
  }
})
export default router;